home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************************************/
- /* */
- /* Module Name: GetHSSoundInput */
- /* */
- /* File Name: GetHSSoundInput.c */
- /* */
- /* © Apple Computer, Inc. 1994-1995 */
- /* All Rights Reserved */
- /* */
- /* Revision History: */
- /* */
- /* Date Who Modification */
- /* */
- /* 1994-06-09 Jaakko Railo Original version */
- /* */
- /************************************************************************************************/
-
- /****************************************** DESCRIPTION ******************************************
-
- *************************************************************************************************/
-
- /******************************************** HEADERS *******************************************/
-
- #include "Sound.h"
- #include "SoundInput.h"
- #include "TextUtils.h"
- #include "Types.h"
-
- #ifndef __TELEPHONES__
- #include "Telephones.h"
- #endif
-
- #include "TestModule.h"
-
- /****************************************** DEFINITIONS *****************************************/
-
- /****************************************** PROTOTYPES ******************************************/
-
- OSErr GetDeviceSettings (long myInRefNum, short *numChannels, Fixed *sampleRate, short *sampleSize, OSType *compressionType, Str255 dName);
- void RecordSnd (CHRSPtr paramPtr, Handle mySndH, Str255 deviceName);
- void PlaySnd (CHRSPtr paramPtr, Handle mySndH, Component mySndOut);
- void DoTest (CHRSPtr paramPtr);
-
- /************************************************************************************************/
- /************************************************************************************************/
-
-
- pascal short TestModule (CHRSPtr paramPtr)
- {
- short returnValue = noErr;
-
- if (paramPtr->version <= kTestModuleVersion) {
-
- DoTest (paramPtr);
-
- }
- else
- returnValue = kWrongVersion;
-
- return (returnValue);
- }
-
-
- OSErr GetDeviceSettings (long myInRefNum, short *numChannels, Fixed *sampleRate, short *sampleSize, OSType *compressionType, Str255 dName)
- {
- OSErr myErr;
-
- if (((myErr = SPBGetDeviceInfo (myInRefNum, siNumberChannels, (Ptr) numChannels)) == noErr) &&
- ((myErr = SPBGetDeviceInfo (myInRefNum, siSampleRate, (Ptr) sampleRate)) == noErr) &&
- ((myErr = SPBGetDeviceInfo (myInRefNum, siSampleSize, (Ptr) sampleSize)) == noErr) &&
- ((myErr = SPBGetDeviceInfo (myInRefNum, siCompressionType, (Ptr) compressionType)) == noErr) &&
- ((myErr = SPBGetDeviceInfo (myInRefNum, siDeviceName, (Ptr) dName)) == noErr))
- return (myErr);
- else
- return (myErr);
- }
-
-
- void RecordSnd (CHRSPtr paramPtr, Handle mySndH, Str255 deviceName)
- {
- SPB mySPB;
- OSErr myErr;
- long myBuffSize;
- short myHeadrLen;
- short myNumChans;
- short mySampSize;
- Fixed mySampRate;
- OSType myCompType;
- Str255 myDevName;
- long myInRefNum;
-
- if ((myErr = SPBOpenDevice (deviceName, siWritePermission, &myInRefNum)) == noErr) {
-
- if ((myErr = GetDeviceSettings (myInRefNum, &myNumChans, &mySampRate, &mySampSize, &myCompType, myDevName)) == noErr) {
- Print (paramPtr, "Number of channels : %d", myNumChans);
- Print (paramPtr, "Sample rate : %ld", mySampRate);
- Print (paramPtr, "Sample size : %d", mySampSize);
- Print (paramPtr, "Compression type : %lu", myCompType);
- Print (paramPtr, "Device name : %*.*s", myDevName[0], myDevName[0], &myDevName[1]);
- myErr = SetupSndHeader ((SndListHandle) mySndH, myNumChans, mySampRate, mySampSize, myCompType, 60, 0, &myHeadrLen);
- myBuffSize = GetHandleSize (mySndH) - myHeadrLen;
- HLock (mySndH);
- mySPB.inRefNum = myInRefNum;
- mySPB.count = myBuffSize;
- mySPB.milliseconds = 0;
- mySPB.bufferLength = myBuffSize;
- mySPB.bufferPtr = (Ptr)((long) *mySndH + myHeadrLen);
- mySPB.completionRoutine = nil;
- mySPB.interruptRoutine = nil;
- mySPB.userLong = 0;
- mySPB.error = noErr;
- mySPB.unused1 = 0;
- Print (paramPtr, "Start of recording (100 KB)");
- myErr = SPBRecord (&mySPB, false);
- Print (paramPtr, "End of recording");
- HUnlock (mySndH);
- myErr = SetupSndHeader ((SndListHandle) mySndH, myNumChans, mySampRate, mySampSize, myCompType, 60, mySPB.count, &myHeadrLen);
- }
- else
- Print (paramPtr, "### GetDeviceSettings failed : %d", myErr);
-
- myErr = SPBCloseDevice (myInRefNum);
- }
- else
- Print (paramPtr, "### SPBOpenDevice failed : %d", myErr);
- }
-
-
- void PlaySnd (CHRSPtr paramPtr, Handle mySndH, Component mySndOut)
- {
- OSErr myErr;
- SndChannelPtr myChan = nil;
-
- if ((myErr = SndNewChannel (&myChan, kUseOptionalOutputDevice, (long) mySndOut, nil)) == noErr) {
- Print (paramPtr, "Start of playback");
- if ((myErr = SndPlay (myChan, (SndListHandle) mySndH, false)) != noErr)
- Print (paramPtr, "### SndPlay failed : %d", myErr);
- Print (paramPtr, "End of playback");
- myErr = SndDisposeChannel (myChan, false);
- }
- else
- Print (paramPtr, "### SndNewChannel failed : %d", myErr);
- }
-
-
- void DoTest (CHRSPtr paramPtr)
- {
- TELHandle termHand = GetCurrentTELHandle (paramPtr);
- OSErr errCode;
- Str255 deviceName;
- Component SndOut;
- Handle mySndH;
-
- mySndH = NewHandle (100000);
-
- if ((errCode = TELGetHSSoundInput (termHand, deviceName)) == noErr) {
- Print (paramPtr, "TELGetHSSoundInput --> deviceName = %*.*s", deviceName[0], deviceName[0], &deviceName[1]);
- RecordSnd (paramPtr, mySndH, deviceName);
- if ((errCode = TELDisposeHSSoundInput (termHand, deviceName)) == noErr)
- Print (paramPtr, "TELDisposeHSSoundInput --> deviceName %*.*s disposed", deviceName[0], deviceName[0], &deviceName[1]);
- else
- Print (paramPtr, "### TELDisposeHSSoundInput failed : %d", errCode);
- }
- else
- Print (paramPtr, "### TELGetHSSoundInput failed : %d", errCode);
-
- if ((errCode = TELGetHSSoundOutput (termHand, &SndOut)) == noErr) {
- Print (paramPtr, "TELGetHSSoundOutput --> SndOut = %ld", (long) SndOut);
- PlaySnd (paramPtr, mySndH, SndOut);
- if ((errCode = TELDisposeHSSoundOutput (termHand, SndOut)) == noErr)
- Print (paramPtr, "TELDisposeHSSoundOutput --> SndOut %ld disposed", (long) SndOut);
- else
- Print (paramPtr, "### TELDisposeHSSoundOutput failed : %d", errCode);
- }
- else
- Print (paramPtr, "### TELGetHSSoundOutput failed : %d", errCode);
-
- DisposeHandle (mySndH);
- }
-
-
-